/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package managers;

import DAO.TareaDAO;
import JPA.JPATareaDAO;
import domain.Entity.EntityTarea;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityUsuario;
import domain.Entity.EntityProyecto;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.http.HttpSession;

/**
 *
 * @author jorge
 */
public class TareaManager {
    
     private TareaDAO tarea;
     private static TareaManager instance = null;
        
  	
        public static synchronized TareaManager getInstance(){
		if(instance == null){
			instance = new TareaManager();
			return instance;
		}
		else
			return instance;
	}
        
	
	private TareaManager(){
		this.tarea =new JPATareaDAO();
	}

    public void TareasyEtiquetasTrabajador(EntityTrabajador etr, HttpSession session) {
       
        List tareasTrabajador = new ArrayList();
             List l = new ArrayList();
             Iterator it = etr.getEt().iterator();
             while(it.hasNext()){
                EntityTarea t = (EntityTarea) it.next();
                tareasTrabajador.add(t);
                    StringTokenizer st = new StringTokenizer(t.getEtiquetas());
                    while(st.hasMoreTokens()){
                        String s = st.nextToken();
                            if(!l.contains(s)){ 
                                l.add(s);
                            } 
                    }
                }
                Collections.sort(l);
                session.setAttribute("tareasdelInforme", tareasTrabajador);
                session.setAttribute("etiquetas", l);
    }

    public void addTarea(String nombreTarea, Date fecIni, Date fecFin, EntityProyecto proyecto, String etiqueta) {
        
            EntityTarea et = new EntityTarea();
            
            et.setNombreTarea(nombreTarea);
            et.setFecha_ini(fecIni);
            et.setFecha_fin(fecFin);
            et.setCompletado(false);
            Time t = new Time(0,0,0);
            et.setEpy(proyecto);
            et.setEtiquetas(etiqueta);
            
            tarea.anadirTarea(et);
    }
        
       
        
        public EntityTarea get(String nombre,long idProyecto){
         return  this.tarea.obtenerTarea(nombre,idProyecto);  
        }

    public void modificarTarea(EntityTarea et, String nombreTarea, Date fecIni, Date fecFin, boolean comp, String etiqueta) {
        
        et.setNombreTarea(nombreTarea);
        et.setFecha_ini(fecIni);
        et.setFecha_fin(fecFin);
        et.setCompletado(comp);
        et.setEtiquetas(etiqueta);
        
        tarea.modificarTarea(et);
        
    }

        public List mostrarTareasProyecto(Long idProyecto) {
            return this.tarea.tareasProyecto(idProyecto);
        }
        
        public void borrarTarea(long idTarea){
            this.tarea.borrarTarea(idTarea);
        }
        
         
         
        public EntityTarea get(long idTarea){
            return this.tarea.getTarea(idTarea);
        }
        
        public void asignarTarea(EntityTarea et){
            this.tarea.asignarTarea(et);
        }
        
        public List mostrarTrabajadoresTarea(long idTarea){
           return this.tarea.trabajadoresTarea(idTarea);
        }
        
        public List mostrarTareasTrabajador(long dni){
           return this.tarea.TareasDelTrabajador(dni);
        }

    public List obtenerEtiquetas(EntityUsuario eu) {
        ProyectoManager pm = ProyectoManager.getInstance();
        List l = new ArrayList();
            List proyectos = pm.mostrarProyectosGestor(eu.getDni());
        //List proyectos = new ArrayList();

            Iterator itp = proyectos.iterator();
            while(itp.hasNext()){
                EntityProyecto proyecto = (EntityProyecto) itp.next();
                List tareas = mostrarTareasProyecto(proyecto.getIdProyecto());
                Iterator itt = tareas.iterator();
                while(itt.hasNext()){
                    EntityTarea t = (EntityTarea) itt.next();
                    StringTokenizer st = new StringTokenizer(t.getEtiquetas());
                    while(st.hasMoreTokens()){
                        String s = st.nextToken();
                            if(!l.contains(s)){ 
                                l.add(s);
                            } 
                    }
                }
            }    
            Collections.sort(l);
            return l;
    }
        
        public void quitarTarea(EntityTarea et){
            this.tarea.quitarTarea(et);
        }
        
        public List trabajo(Date fechaIni,EntityTarea tarea,Date fechaFin){
            return this.tarea.trabajo(fechaIni, tarea, fechaFin);
            
        }
        
         public List trabajoTrabajador(Date fechaIni,EntityTarea tarea,EntityTrabajador trabajador,Date fechaFin){
            return this.tarea.trabajoTrabajador(fechaIni, tarea, trabajador, fechaFin);
            
        }
         
         public void completar(EntityTarea et){
             this.tarea.completar(et);
         }
         
         public List TareasTrabajadorEtiqueta(EntityTrabajador etr,String etiqueta){
            return this.tarea.TareasDelTrabajadorEtiqueta(etr, etiqueta);
        }
         
         public List TareasProyectoEtiqueta(long idProyecto,String etiqueta){
            return this.tarea.tareasProyectoEtiqueta(idProyecto, etiqueta);
        }
         
         public void etiquetar(EntityTarea et,String etiquetas){
             
              
        String etiqueta = "" ;
        
        String etiquetasTarea = et.getEtiquetas();
        List l = new ArrayList();
        StringTokenizer st = new StringTokenizer(etiquetasTarea);
        while(st.hasMoreTokens()){
            String s = st.nextToken();
                l.add(s);
        }
        
        StringTokenizer st2 = new StringTokenizer(etiquetas);
        while(st2.hasMoreTokens()){
            String s = st2.nextToken();
            if(!l.contains(s)){
                l.add(s);
            }
        }
        Collections.sort(l);
        Iterator it = l.iterator();
        while(it.hasNext()){
            etiqueta = etiqueta.concat((String) it.next()+" ");
        }
        et.setEtiquetas(etiqueta);
             
        this.tarea.etiquetar(et);
         } 
         
         
         
}        
